Analyse - use cases
De functionele vereisten kunnen we door een UML use case diagrammen voorstellen.
Video
Beschrijving
Een use case bestaat actoren (gebruikersrollen, aangeduid met een draadpoppetje) en use cases (scenario’s, aangeduid met een ellips) die de actor kan uitvoeren.
Een use case beschrijft alleen de interactie, niet de interne werking van het systeem. Use cases kunnen goed met eindgebruikers besproken worden, omdat ze aansluiten bij hun ervaringsswereld.
De naam van een use case bestaat over het algemeen uit een zelfstandig naamwoord en een werkwoord.
Use Cases zijn daardoor geschikt om MVC applicaties te modelleren (ook Razor Pages die op ASP.NET MVC zijn gebouwd). Het zelfstandig naamwoord komt overeen met de controllernaam en het werkwoord met de naam van een functie uit de controller klasse. Dit stemt overeen met 'propere" url's waarbij de gebruiker de volgende url's ingeeft:
zelfstandignaamwoord/entiteit | werkwoord/actie | url |
---|---|---|
home | show | u-trip.be/home/show |
curiosity list | view | u-trip/be/curiositylist/view |
curiosity list | search | u-trip/be/curiositylist/search |
curiosity | roadmap | u-trip/be/curiosity/roadmap |
contact | take | u-trip/be/contact/take |
curiosity | comment | u-trip/be/curiosity/comment |
curiosity | dolike | u-trip/be/curiosityl/dolike |
curiosity | add | u-trip/be/curiosityl/add |
tour | add | u-trip/be/tour/add |
tour | dolike | u-trip/be/tour/dolike |
tour | comment | u-trip/be/tour/comment |
Gebruik
Mijn overtuiging over het belang van use cases als vertrekpunt voor het schrijven van applicaties dateert al van heel lang. Mijn benadering van use cases zijn gebaseerd op Jacobson's Objectory-proces, gedefinieerd in Object-Oriented Software Engineering: A Use Case Driven Approach (Addison-Wesley, 1992). Een sleutelpassage legt uit wat er bedoeld wordt met use case driven:
Als we het systeemgedrag willen veranderen, hermodelleren we de juiste actor en use case. De hele systeemarchitectuur wordt bepaald door wat de gebruikers met het systeem willen doen. Aangezien we dit kunnen opvolgen doorheen alle, zullen we het systeem kunnen aanpassen aan nieuwe vereisten. We vragen de gebruikers wat ze willen veranderen (welke use case) en kijken direct waar deze wijzigingen in de andere modellen moeten worden aangebracht.
Een meer recent boek hierover:
Don Rosenberg, Matt Stephens, Use Case Driven Object Modeling with UML, Theory and Practice, Uitgeverij: Apress, 21/01/2013
Voorbeeld
Ik ben op een bepaald moment use cases beginnen gebruiken om de CRUD (create, read, update en delete) operaties voor entiteiten (tabellen) te modelleren. Dit heeft me geholpen om een overzicht te krijgen van alle stappen die gezet moeten worden vanuit het MVC (Model, View, Contrller) perspectief.
Sommige collega's vonden totaal overbodig voor deze zogenaamde eenvoudige operaties. Laten we het toch meer eens uitproberen en kijken als het iets oplevert. Als voorbeeld nemen we de entiteit/tabel Person
. We willen een use diagram uitwerken waarbij we willen uittekenen wat een gebruiker moet kunnen doen voor het bewerken van persoonsgegevens in de Person
entiteit/tabel.
We beginnen met een use case diagram. We geven hier het voorbeeld van de tabel/entiteit Person:
Use case elementen
- Actor
Een actor stelt de entiteiten voor die bepaalde rollen in een bepaald systeem vervullen. De verschillende rollen die de actor kan spelen, zijn de use cases van de gebruikers in een bepaald systeem. Een actor in een use case-diagram heeft interactie met een use case.Een actor wordt weergegeven door een stokfiguur in een use case-diagram dat "buiten" de systeemgrens wordt afgebeeld, zoals weergegeven in de afbeelding. - Use case
De use case wordt voorgesteld door een ovaal met daarin een naam die bepaalde functionaliteit omschrijft. Een goede use case is er een die het doel van de use case het best omschrijft. Bijvoorbeeld: “bekijk boekenlijst”, “wijzig besteloverzicht” of “bekijk boek informatie”.
Meestal bestaat een use case uit een zelfstandig naamwoord en een werkwoord. - Verwantschappen (relationships)
Illustreer verwantschappen tussen een actor en een use case met een simpele lijn. Gebruik voor relaties tussen use-cases pijlen met het label "include" of "extends". Een "include"-verwantschap geeft aan dat de ene use-case nodig is voor de andere om een taak uit te voeren. Een "extend"-verwantschap geeft alternatieve opties aan onder een bepaalde use case. Of nog anders gezegd, wanneer je pijlen tekent tussen use cases dan kanje aangeven of de twee use cases elkaar nodig hebben (noteer “uses” of “include”) of een optionele aanvulling op elkaar zijn (“extends”). - Systeem
Het systeem (grens, boundery) is in ons geval de webpagina's waarmee de tabel Person wordt beheerd. Binnen het kader van het systeem noteer je de specifieke use cases, de actors staan daar altijd buiten. Een systeem kan ook een versienummer hebben. Zo kun je bijvoorbeeld aangeven in welke versie van je website een use case wordt geïntroduceerd.
In het voorbeeld hierboven hebben we de use cases getekend voor het beheersysteem. We hebben geen use cases getekend voor andere systemen, bijvoorbeeld een registratie systeem. In de opdracht zijn er twee systemen.
Je kan systemen ook laten overlappen of nesten. Een mooi voorbeeld is het gebruik van systemen voor het weergeven van verschillende releases:
Use case beschrijvingen
We beschrijven alleen de use cases voor Peroon in detail. Meestal worden wireframes gelijktijdig gemaakt. Beide tools ondersteunen elkaar. Voor de wireframes kan je terecht op: Fric-frac Wireframes Person.
Person ReadingAll
Deze use case is een uitbreiding van andere use cases. Vandaar dat we die eerst beschrijven.
naam use case | Person ReadingAll |
---|---|
samenvatting | lijst van personen tonen met hun voornaam en familienaam en de mogelijkheid bieden een persoon uit de lijst te selecteren om te kunnen updaten of te deleten. |
actoren | beheerder |
aannamen |
|
beschrijving |
|
alternatief | |
resultaat | de lijst van personen staat op de Index pagina |
Person Index
naam use case | Person Index |
---|---|
samenvatting | lijst van personen tonen met hun voornaam en familienaam en de mogelijkheid bieden een persoon uit de lijst te selecteren om te kunnen updaten of te deleten. |
actoren | beheerder |
aannamen |
|
beschrijving |
|
alternatief | |
resultaat | de lijst van personen staat op de Index pagina |
Person InsertingOne
Een eerste poging tot het beschrijven van Person InsertingOne.
De beheerder moet de mogelijkheid hebben om een nieuwe persoon toe te voegen. Na het intypen van de nieuwe gegevens moet het programma de nieuwe persoon in de tabel Person inserten. Zie hievoor de use case hieronder.
naam use case | Person InsertingOne |
---|---|
samenvatting | Beheerder maakt een persoon aan, nieuwe persoon toevoegen |
actoren | beheerder |
aannamen |
|
beschrijving |
|
uitzonderingen | [niet ingevulde velden ] : melding welke velden nog ingevuld moeten worden. |
resultaat | de persoongegevens worden via het formulier (submit) verstuurd naar de server om te worden toegevoegd aan de tabel in de database |
Person InsertOne
En nu een eerste poging tot het beschrijven van de use case Person InsertOne:
naam use case | Person InsertOne |
---|---|
samenvatting | nieuwe persoon inserten |
actoren | beheerder |
aannamen |
|
beschrijving |
|
alternatief | de persoon bestaat al |
resultaat | de persoon is toegevoegd in de tabel Person |
Person UpdatingOne
Een eerste poging tot het beschrijven van Person Updating.
De beheerder moet de mogelijkheid hebben om de gegevens van een bestaande persoon te wijzigen. Na het intypen van de nieuwe gegevens moet het programma de gewijzigde persoon in de tabel Person updaten. Zie hievoor de use case hieronder.
naam use case | Person UpdatingOne |
---|---|
samenvatting | de gegevens van een bestaande persoon wijzigen |
actoren | beheerder |
aannamen |
|
beschrijving |
|
uitzonderingen | [niet ingevulde velden ] : melding welke velden nog ingevuld moeten worden. |
resultaat | de persoon gegevens worden verstuurd naar de server om de Person tabel te updaten |
Person UpdateOne
En nu een eerste poging tot het beschrijven van de use case Person UpdateOne:
naam use case | Person UpdateOne |
---|---|
samenvatting | nieuwe gegevens van persoon updaten |
actoren | beheerder |
aannamen |
|
beschrijving |
|
alternatief | wijzigingen annuleren |
resultaat | de persoon is geüpdated in de tabel Person |
Person DeleteOne
En nu een eerste poging tot het beschrijven van de use case Person DeleteOne:
naam use case | Person Delete |
---|---|
samenvatting | de geselecteerde persoon deleten |
actoren | beheerder |
aannamen |
|
beschrijving |
|
alternatief | geen |
resultaat | de persoon is gedeleted in de tabel Person |
Opdracht
Tweedehandsboeken website
- Maak op basis van de functionele vereisten een use case diagram:
- bepaal welke actoren er deel nemen
- noteer de acties die elk van deze actor moet kunnen doen
- Voor zover het mogelijk is, begin de use case beschrijvingen te maken.
- Functionele vereisten
We maken een onderscheid tussen de handelaar (beheer) en koper (bezoeker). We hebben dus twee systemen:- beheer
- een lijst van alle boeken:
- zoeken op titel, auteur, categorie en EAN
- een boek selecteren om de gegevens ervan te kunnen lezen
- deze lijst moet op alle beheerpagina's te zien zijn
- index pagina met lijst van alle boeken en de mogelijkheid een boek toe te voegen
- Reading One pagina waarop de gegevens van 1 boek te zien zijn. Met de volgende mogelijkheden:
- het getoonde boek deleten
- het getoonde boek updaten
- een nieuw boek toevoegen
- Inserting One pagina waarmee een nieuw boek kan worden toegevoegd
- Updating One pagina waarmee de gegevens van een geselecteerd boek kunnen worden geüpdated
- een lijst van alle boeken:
- bezoeker
- toon de 10 laatste boeken die zijn ingebracht
- boeken kunnen opzoeken op auteursnaam, titel, EAN en categorie
- boek in winkelwagentje zetten
- boeken die in winkelwagentje staan bestellen via een bestelformulier (geen mogelijkheid om online te betalen)
- inhoud van winkelwagentje beheren:
- bekijken
- item deleten
- bestellen
- bewaren voor een volgende keer
- beheer